/*
混入 mixins

在Dart中可以使用mixins实现类似多继承的功能

因为mixins使用的条件，随着Dart版本一直在变，这里讲的是Dart2.x中使用mixins的条件：

  1、作为mixins的类只能继承自Object，不能继承其他类
  2、作为mixins的类不能有构造函数
  3、一个类可以mixins多个mixins类
  4、mixins绝不是继承，也不是接口，而是一种全新的特性
*/

// 1. 基本使用mixins
mixin A {
  String info = "this is A";
  void printA() {
    print("A");
  }
}

mixin B {
  void printB() {
    print("B");
  }
}

class C with A, B {}

// 2. 结合继承
mixin Eat {
  void eat() {
    print('eating');
  }
}

mixin Speak {
  void speak() {
    print('speaking');
  }
}

abstract class Animal {
  void breath() {
    print('breath');
  }
}

// people类继承animal 并混入eat speak  同时拥有了他们的属性和方法
class People extends Animal with Eat, Speak {}

void main() {
  var c = new C();
  c.printA();
  c.printB();
  print(c.info);

  People p = new People();
  p.breath();
}
